In object-oriented programming, the Model-View-Controller (MVC) pattern is a software architectural pattern that divides an application program into model, view and controller component parts. This creates a separation between the internal representation of the data and the way that the data is presented to the user (or input accepted from the user).
The model component is the internal representation of the data, that is, an object representing some data. The view component is an object that provides a representation of that data to the user, that is, the view may be considered a visualization of the state of the model. The controller component object accepts input from the user and, for example, allows changing the state of the model.
While the traditional MVC pattern works well for many types of application programs, there are problems with it when the data that a model and/or view needs are not readily available. For example, sometimes data needs to be retrieved from a network source, whereby models and views need to wait for the data.